package com.zenithmind.disk.feign;

import com.zenithmind.disk.pojo.vo.UsersVO;
import com.zenithmind.common.result.Result;
import com.zenithmind.common.result.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 用户服务Feign客户端降级实现
 * 遵循单一职责原则：专注于服务降级处理
 * 遵循里氏替换原则：完全实现UserFeignClient接口契约
 */
@Component
@Slf4j
public class UserFeignFallbackImpl implements UserFeignClient {

    private static final String SERVICE_UNAVAILABLE_MESSAGE = "用户服务暂时不可用，请稍后重试";

    @Override
    public Result<UsersVO> getUserById(String userId) {
        log.error("用户服务降级：获取用户信息失败，用户ID: {}", userId);
        return Result.fail(ResultCode.SERVICE_UNAVAILABLE, SERVICE_UNAVAILABLE_MESSAGE);
    }

    @Override
    public Result<Void> updateStorageUsed(String userId, long fileSize) {
        log.error("用户服务降级：更新存储使用量失败，用户ID: {}, 文件大小: {}", userId, fileSize);
        // 对于存储更新失败，我们记录错误但不阻止文件操作
        return Result.fail(ResultCode.SERVICE_UNAVAILABLE, "存储使用量更新失败，但文件操作已完成");
    }

    @Override
    public Result<Boolean> checkStorageSpace(String userId, long requiredSize) {
        log.error("用户服务降级：检查存储空间失败，用户ID: {}, 需要空间: {}", userId, requiredSize);
        // 降级时默认返回false，阻止可能的存储溢出
        return Result.success(false);
    }

    @Override
    public Result<StorageStatsVO> getStorageStats(String userId) {
        log.error("用户服务降级：获取存储统计失败，用户ID: {}", userId);
        // 返回默认的存储统计信息
        StorageStatsVO defaultStats = new StorageStatsVO(0L, 0L);
        return Result.success(defaultStats);
    }

}